package com.dragon.modules.yuegou.client.wechat_mini.common;

import javax.annotation.Nullable;

/**
 * 微信小程序业务异常<br>
 * 接口调用成功了，微信正常响应，但是响应了错误码
 * 
 * @author liuwu
 * @date 2019年7月5日
 *
 */
public class MiniBusinessException extends MiniException {

	private static final long serialVersionUID = 1L;

	/**
	 * 错误码
	 */
	private final int errcode;

	/**
	 * 错误信息
	 */
	private final String errmsg;

	/**
	 * 错误码备注
	 */
	@Nullable
	private final String remark;

	/**
	 * 构造一个小程序业务异常
	 * 
	 * @param errcode 小程序响应错误码
	 * @param errmsg  小程序响应错误信息
	 */
	public MiniBusinessException(int errcode, String errmsg) {
		super(String.format("{errcode:%s, errmsg:%s}", errcode, errmsg));
		this.errcode = errcode;
		this.errmsg = errmsg;
		this.remark = null;
	}

	/**
	 * 构造一个小程序业务异常
	 * 
	 * @param code   小程序错误码枚举
	 * @param errmsg 错误信息
	 */
	public MiniBusinessException(MiniCode code, String errmsg) {
		super(String.format("{errcode:%s, errmsg:%s, code:%s, remark:%s}", code.getCode(), errmsg, code,
				code.getRemark()));
		this.errcode = code.getCode();
		this.errmsg = errmsg;
		this.remark = code.getRemark();
	}

	/**
	 * 判断小程序业务异常的错误码
	 * 
	 * @param errcode 错误码
	 * @return true表示业务异常代表着该错误码，false表示不是。
	 */
	public boolean is(MiniCode errcode) {
		return this.errcode == errcode.getCode();
	}

	/**
	 * 获取小程序错误码备注
	 * 
	 * @return 小程序错误码备注
	 */
	@Nullable
	public String getRemark() {
		return remark;
	}

	/**
	 * 获取小程序错误码
	 * 
	 * @return 错误码
	 */
	public int getErrcode() {
		return errcode;
	}

	/**
	 * 获取小程序错误信息
	 * 
	 * @return 错误信息
	 */
	public String getErrmsg() {
		return errmsg;
	}
}
